fix: resolve soft assertions for Cucumber steps (#14573)#1994
Merged
christian-bromann merged 2 commits intowebdriverio:mainfrom Jan 17, 2026
Merged
Conversation
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
WebdriverIO's expect.soft() was failing immediately in Cucumber steps instead of collecting failures and reporting them at the end. The root cause was in expect-webdriverio's
softAssert.ts
addFailure()
method threw immediately when no test context was set (which happened because Cucumber's beforeStep hook wasn't reliably setting context).
The fix introduces a GLOBAL_TEST_ID fallback. Instead of throwing an error when the context is missing, the service now stores the failure under a global bucket. This ensures that:
Execution continues even if the framework context is lost.
Failures are still collected and can be reported at the end of the step/scenario via the afterStep or afterScenario hooks.